import thunk from 'redux-thunk'
import { createStore, applyMiddleware } from 'redux'
import { UserState } from './reducers/user'
import { SystemState } from './reducers/system'
import { persistStore, persistReducer } from 'redux-persist'
//  存储机制，可换成其他机制，当前使用sessionStorage机制
import sessionStorage from 'redux-persist/lib/storage/session'
import rootReducer from './reducers'

export interface StoreState {
  user: UserState
  system: SystemState
}

const persistConfig = {
  key: 'root', // 必须有的
  storage: sessionStorage, // 缓存机制
  whitelist: ['user', 'system'], // reducer 里持久化的数据,除此外均为不持久化数据
  //  blacklist: ['xxx'] // reducer 里不持久化的数据,除此外均为持久化数据
}
const persistedReducer = persistReducer(persistConfig, rootReducer)

// createStore创建一个 Redux store 来以存放应用中所有的 state。
// applyMiddleware将所有中间件组成一个数组。
// 中间件可以扩展`store.dispatch`。middleware 还拥有“可组合”这一关键特性。多个 middleware 可以被组合到一起使用，形成 middleware 链。其中，每个 middleware 都不需要关心链中它前后的 middleware 的任何信息。
const store = createStore(persistedReducer, applyMiddleware(thunk))
export const persistor = persistStore(store)
export default store
